#ifndef __MYIIC_H
#define __MYIIC_H
#include "sys.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用，未经作者许可，不得用于其它任何用途
//Mini STM32开发板
//IIC 驱动函数	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/6/10 
//版本：V1.0
//版权所有，盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
////////////////////////////////////////////////////////////////////////////////// 	  

//----------------------IIC 0 -------------------  	   		   
//IO方向设置
#define IIC0_SCL_PIN  GPIO_Pin_8
#define IIC0_SCL_PIN_NUM  8
#define IIC0_SDA_PIN  GPIO_Pin_9
#define IIC0_SDA_PIN_NUM  9
//IO操作函数	 
#define IIC0_SCL    PBout(IIC0_SCL_PIN_NUM) //SCL
#define IIC0_SDA    PBout(IIC0_SDA_PIN_NUM) //SDA	 
#define IIC0_READ_SDA   PBin(IIC0_SDA_PIN_NUM)  //输入SDA 
//----------------------IIC 1 -------------------  	   		   
//IO方向设置
#define IIC1_SCL_PIN  GPIO_Pin_6
#define IIC1_SCL_PIN_NUM  6
#define IIC1_SDA_PIN  GPIO_Pin_7
#define IIC1_SDA_PIN_NUM  7
//IO操作函数	 
#define IIC1_SCL    PBout(IIC1_SCL_PIN_NUM) //SCL
#define IIC1_SDA    PBout(IIC1_SDA_PIN_NUM) //SDA	 
#define IIC1_READ_SDA   PBin(IIC1_SDA_PIN_NUM)  //输入SDA 
//----------------------IIC 2 -------------------  	   		   
//IO方向设置
#define IIC2_SCL_PIN  GPIO_Pin_13
#define IIC2_SCL_PIN_NUM  13
#define IIC2_SDA_PIN  GPIO_Pin_12
#define IIC2_SDA_PIN_NUM  12
//IO操作函数	 
#define IIC2_SCL    PBout(IIC2_SCL_PIN_NUM) //SCL
#define IIC2_SDA    PBout(IIC2_SDA_PIN_NUM) //SDA	 
#define IIC2_READ_SDA   PBin(IIC2_SDA_PIN_NUM)  //输入SDA 
//----------------------IIC 3 -------------------  	   		   
//IO方向设置
#define IIC3_SCL_PIN  GPIO_Pin_15
#define IIC3_SCL_PIN_NUM  15
#define IIC3_SDA_PIN  GPIO_Pin_14
#define IIC3_SDA_PIN_NUM  14
//IO操作函数	 
#define IIC3_SCL    PBout(IIC3_SCL_PIN_NUM) //SCL
#define IIC3_SDA    PBout(IIC3_SDA_PIN_NUM) //SDA	 
#define IIC3_READ_SDA   PBin(IIC3_SDA_PIN_NUM)  //输入SDA 


//
typedef enum{
    IIC0 =0,
    IIC1 =1,
    IIC2 =2,
    IIC3 =3
}IIC_enum;



//IIC所有底层操作函数
void IIC_Init(IIC_enum IIC_channel);                //初始化IIC的IO口				 
void IIC_Start(IIC_enum IIC_channel);				//发送IIC开始信号
void IIC_Stop(IIC_enum IIC_channel);	  			//发送IIC停止信号
void IIC_Send_Byte(IIC_enum IIC_channel,u8 txd);			//IIC发送一个字节
u8 IIC_Read_Byte(IIC_enum IIC_channel,u8 ack);//IIC读取一个字节
u8 IIC_Wait_Ack(IIC_enum IIC_channel); 				//IIC等待ACK信号
void IIC_Ack(IIC_enum IIC_channel);					//IIC发送ACK信号
void IIC_NAck(IIC_enum IIC_channel);				//IIC不发送ACK信号
//IIC 中间层操作函数
//single
 

u8 IICwriteBit(IIC_enum IIC_channel,u8 dev,u8 reg,u8 bitNum,u8 data);
u8 IICreadByte(IIC_enum IIC_channel,u8 dev, u8 reg, u8 *data);
u8 I2C_ReadOneByte(IIC_enum IIC_channel,u8 I2C_Addr,u8 addr);

// s

u8 IICwriteByte(IIC_enum IIC_channel,u8 dev, u8 reg, u8 data);
u8 IICwriteBits(IIC_enum IIC_channel,u8 dev,u8 reg,u8 bitStart,u8 length,u8 data);

u8 IICwriteBytes(IIC_enum IIC_channel,u8 dev, u8 reg, u8 length, u8* data);


u8 IICreadBytes(IIC_enum IIC_channel,u8 dev, u8 reg, u8 length, u8 *data);

void IIC_SCAN(IIC_enum IIC_channel,u8 dev_add);
#endif


